#!/bin/bash

# Docker 镜像与容器操作脚本
# 导出 Docker 镜像至指定路径
export_image() {
    # 参数检查
    if [ -z "$1" ] || [ -z "$2" ]; then
        echo "用法: 导出镜像 <镜像名称> <导出路径>"
        return 1
    fi

    local image_name="$1"
    local export_path="$2"

    echo "正在导出镜像 '$image_name' 至 '$export_path'..."
    docker save -o "$export_path" "$image_name"
    if [ $? -eq 0 ]; then
        echo "镜像导出成功。"
    else
        echo "镜像导出失败。"
        return 1
    fi
}

# 将运行中的Docker容器导出为新的镜像
export_container_as_image() {
    # 参数检查
    if [ -z "$1" ] || [ -z "$2" ]; then
        echo "用法: 导出容器为镜像 <容器名称或ID> <新镜像名称>"
        return 1
    fi

    local container_name_or_id="$1"
    local new_image_name="$2"

    echo "正在将运行中的容器 '$container_name_or_id' 导出为镜像 '$new_image_name'..."
    docker commit "$container_name_or_id" "$new_image_name"
    if [ $? -eq 0 ]; then
        echo "容器已成功导出为镜像。"
    else
        echo "容器导出为镜像失败。"
        return 1
    fi
}

# 导入 Docker 镜像文件
import_image() {
    # 参数检查
    if [ -z "$1" ]; then
        echo "用法: 导入镜像 <导入文件路径>"
        return 1
    fi

    local import_path="$1"

    if [ ! -f "$import_path" ]; then
        echo "文件 '$import_path' 不存在。"
        return 1
    fi

    echo "正在从 '$import_path' 导入 Docker 镜像..."
    docker load -i "$import_path"
    if [ $? -eq 0 ]; then
        echo "镜像导入成功。"
    else
        echo "镜像导入失败。"
        return 1
    fi
}

# 打印帮助信息
print_help() {
    echo -e "\n操作指南:\n"
    echo "+---------------------------+---------------------------------------------------------+"
    echo "| 功能                      | 命令格式                                                |"
    echo "+---------------------------+---------------------------------------------------------+"
    echo "| export_image              | ./docker-tools.sh 导出镜像 <镜像名称> <导出路径>        |"
    echo "| export_container          | ./docker-tools.sh 导出容器为镜像 <容器名或ID> <新镜像名>|"
    echo "| import_image              | ./docker-tools.sh 导入镜像 <导入文件路径>               |"
    echo "+---------------------------+---------------------------------------------------------+"
    echo "| 注:                       | 使用前请确保已赋予权限，如 'chmod +x docker-tools.sh'   |"
    echo "+---------------------------+---------------------------------------------------------+"
}


# 主程序：解析命令行参数，执行对应功能或打印帮助
case "$1" in
    export_image)
        shift
        export_image "$@"
        ;;
    import_image)
        shift
        import_image "$@"
        ;;
    export_container_as_image)
        shift
        export_container "$@"
        ;;
    *)
        print_help
        ;;
esac
